import { useEffect, useState } from "react";
import { z } from "zod";
import { trpc } from "@/app/_trpc/client";
import useFormHandler from "@/hooks/useFormHandler";
import { useToast } from "@/components/ui/use-toast";
import { modifyProjectCostsSchema } from "@/lib/schemas/modifyProjectCostSchema";

const useModifyProjectCosts = (project: any) => {
  const [open, setOpen] = useState(false);
  const utils = trpc.useUtils();
  const { toast } = useToast();

  const defaultValues: z.infer<typeof modifyProjectCostsSchema> = {
    costPerMeter: 0,
    totalCostMaterials: 0,
    totalCostPerMeter: 0,
    laborCost: 0,
    name: ""
  };

  const { form, isInputChanged, setIsInputChanged } = useFormHandler(
    modifyProjectCostsSchema,
    defaultValues
  );

  const { mutate: updateProjectMutation, isPending } =
    trpc.projects.updateProject.useMutation({
      onSuccess: () => {
        toast({
          title: "Éxito!",
          description: "Proyecto actualizado con éxito",
        });
        utils.projects.getProjectById.invalidate({ value: project?.id as any });
        utils.projects.getProjects.invalidate();
        setOpen(false);
      },
      onError: () => {
        toast({
          title: "Error!",
          description: "Error al actualizar el proyecto",
          variant: "destructive",
        });
      },
    });

  useEffect(() => {
    if (project) {
      form.setValue("costPerMeter", project.costPerMeter!);
      form.setValue("laborCost", project.laborCost!);
      form.setValue("totalCostMaterials", project.totalCostMaterials!);
      form.setValue("totalCostPerMeter", project.totalCostPerMeter!);
      form.setValue("name", project.name);
    }
  }, [project, form]);

  const onSubmit = (values: z.infer<typeof modifyProjectCostsSchema>) => {
    updateProjectMutation({ ...values, id: project?.id! });
  };

  return {
    open,
    setOpen,
    form,
    isInputChanged,
    isPending,
    onSubmit,
  };
};

export default useModifyProjectCosts;